/**
 * archivo:NaipeUtil.java
 * autor: acabrera
 * fecha: 10/10/2011
 */
package ar.org.libre.truco.api.util;

import java.util.Random;

import sun.util.logging.resources.logging;

import ar.org.libre.truco.api.Naipe;

/**
 * @author acabrera
 * @since 10/10/2011
 */
public final class NaipeUtil {

	/**
	 * valor naipe
	 */
	private static final int DIEZ=10;
	private static final int ONCE=11;
	private static final int DOCE=12;
	private static final int SIETE=7;
	private static final int SEIS=6;
	private static final int CINCO=5;
	private static final int CUATRO=4;
	private static final int TRES=3;
	private static final int DOS=2;
	private static final int ANCHO=1;
	/**
	 * valor palos
	 */
	private static final int MACHO_PALO=1;
	private static final int HEMBRA_PALO=2;
	private static final int SIETE_ESPADA_PALO=1;	
	private static final int SIETE_ORO_PALO=0;

	/**
	 * 
	 * @param valor
	 * @return
	 */
	public static final boolean isNegra(int valor){
		if(valor==DIEZ||valor==ONCE||valor==DOCE)
			return true;
		return Boolean.FALSE;
	}
	/**
	 * metodo que me permite obtener el envido de dos numeros 
	 * @param v1
	 * @param v2
	 * @return
	 */
	public static final int valorEnvido(int v1,int v2){
		int resultadoParcial=0;
		v1=NaipeUtil.isNegra(v1)?0:v1;
		v2=NaipeUtil.isNegra(v2)?0:v2;			
		resultadoParcial+=(v1+v2);
		return resultadoParcial;
	}
	/**
	 * compara si el primer naipe <code>n1</code> es mayor o menor a otro <code>n2</code> 
	 * @param n1 : {@link Naipe} que comparará su valor
	 * @param n2 : {@link Naipe} con el cual se comparará su valor
	 * @return
	 */
	public static int resultadoPelea(Naipe n1,Naipe n2){
		getValorJuego(n1);
		getValorJuego(n2);
		if(n1.getValorJuego()<n2.getValorJuego()){
			return -1;
		}else{
			if(n1.getValorJuego()>n2.getValorJuego()){
				return 1;
			}
		}
		return 0;
	}
	/**
	 * obtengo el valor de un {@link Naipe}, el mismo se define conforme a su <code>valor</code> y a su <code>palo</code>
	 * @param n1
	 */
	private static void getValorJuego(Naipe n1){
		switch (n1.getValor()) {
		case ANCHO:
			switch (n1.getPalo()) {
			case MACHO_PALO:
				n1.setValorJuego(Ponderaciones.MACHO.ordinal());
				break;
			case HEMBRA_PALO:
				n1.setValorJuego(Ponderaciones.HEMBRA.ordinal());
				break;
			default:
				n1.setValorJuego(Ponderaciones.ANCHO.ordinal());
				break;
			}
			break;
		case SIETE:
			switch (n1.getPalo()) {
			case SIETE_ESPADA_PALO:
				n1.setValorJuego(Ponderaciones.SIETE_ESPADA.ordinal());
				break;
			case SIETE_ORO_PALO:
				n1.setValorJuego(Ponderaciones.SIETE_ORO.ordinal());
				break;
			default:
				n1.setValorJuego(Ponderaciones.SIETE.ordinal());
				break;
			}
			break;
		case TRES:
				n1.setValorJuego(Ponderaciones.TRES.ordinal());			
				break;
		case DOS:
			n1.setValorJuego(Ponderaciones.DOS.ordinal());			
			break;	
		case DOCE:
			n1.setValorJuego(Ponderaciones.DOCE.ordinal());			
			break;	
		case ONCE:
			n1.setValorJuego(Ponderaciones.ONCE.ordinal());			
			break;	
		case DIEZ:
			n1.setValorJuego(Ponderaciones.DIEZ.ordinal());			
			break;
		case SEIS:
			n1.setValorJuego(Ponderaciones.SEIS.ordinal());			
			break;
		case CINCO:
			n1.setValorJuego(Ponderaciones.CINCO.ordinal());			
			break;
		case CUATRO:
			n1.setValorJuego(Ponderaciones.CUATRO.ordinal());			
			break;
		default:
			break;
		}
	
	}
	/**
	 * genero un objeto del tipo {@link Naipe} con su respectivo <code>valor</code> y <code>palo</code>
	 * @return
	 */
	public static Naipe generarNaipe(){
		int valor=9;
		int palo;
		
		Random random=new Random();
		palo=random.nextInt(4);
		
		while(valor==9||valor==8){
			random=new Random();
			valor=random.nextInt(12)+1;
		}
		
		Naipe naipe=new Naipe(valor, palo);
		
		return naipe;
	}
}
